'SMTP.OSPLAD.org.ar''''
import time
import time
Created on 14/08/2012

@author: Romina
'''
import time
import datetime
import smtplib
import poplib
#import mimetypes
from email.utils import parsedate
from email.parser import Parser        
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
from domain.entities.mail import MailBandejaEntrada
from domain.config import *
#from email.Encoders import encode_base64


             
class Mailer():
    
    def __init__(self, usuario, clave):
        self.usuario = usuario
        self.clave = clave
        pass
    
    def send(self, mail):
        '''
        recibe un objeto mail con los datos a enviar
        '''

        m = mail
        
        # Construimos un mensaje Multipart, con un texto y una imagen adjunta
        mensaje = MIMEMultipart()
        mensaje['From']= m.From
        mensaje['To']= m.To
        mensaje['Subject']= m.Subject
        
        if m.Text != "":
            # Adjuntamos el texto en html
            mensaje.attach(MIMEText(m.Text, 'html'))
        if len(m.Images) > 0:
            for imag in m.Imagenes:
                # Adjuntamos la imagen
                #file = open("Chuidiang-64.gif", "rb")
                #contenido = MIMEImage(file.read())
                contenido = MIMEImage(imag)
                contenido.add_header('Content-Disposition', 'attachment; filename = "' + imag + '"')
                mensaje.attach(contenido)
        
        # Establecemos conexion con el servidor smtp de gmail
        mailServer = smtplib.SMTP(smtp_host,smtp_port)
        mailServer.ehlo()
        mailServer.starttls()
        mailServer.ehlo()
        mailServer.login(self.usuario, self.clave)
        
        # Enviamos el correo, con los campos from y to.
        mailServer.sendmail(m.From,
                        m.To,
                        mensaje.as_string())
        

        # Cierre de la conexion
        mailServer.close()
        


    def read(self):
        '''
        devuelve un vector con los mails
        que se encuentran en la bandeja de entrada
        '''

        # Se establece conexion con el servidor pop
        if IS_SSL:
            m = poplib.POP3_SSL(pop_host, pop_port) 
        else:
            m = poplib.POP3(pop_host,pop_port)
            
        m.user(self.usuario)
        m.pass_(self.clave)

        # Se obtiene el numero de mensajes pendientes y se hace un
        # bucle para cada mensaje
        numero = len(m.list()[1])
        mails = []
        
        for i in range (numero):
            text = ""
            # Se lee el mensaje
            response, headerLines, bytes = m.retr(i+1)
            # Se mete todo el mensaje en un unico string
            mensaje='\n'.join(headerLines)
            # Se parsea el mensaje
            p = Parser()
            email = p.parsestr(mensaje)
            # Si es un mensaje compuesto
            if (email.is_multipart()):
                # bucle para cada parte del mensaje
                for part in email.get_payload():
                    # Se mira el mime type de la parte
                    tipo =  part.get_content_type()
                    if ("text/plain" == tipo):
                        # Si es texto plano, se saca por pantalla
                        text = part.get_payload(decode=True)
                    if ("image/gif" == tipo):
                        # Si es imagen, se extrae el nombre del fichero
                        # adjunto y se guarda la imagen
                        nombre_fichero = part.get_filename()
                        fp = open('recibido_'+nombre_fichero,'wb')
                        fp.write(part.get_payload(decode=True))
                        fp.close()
            else:
                # Si es mensaje simple
                tipo = email.get_content_type()
                if ("text/plain" == tipo):
                    # Si es texto plano, se escribe en pantalla
                    text = email.get_payload(decode=True)

            mail_bandeja = MailBandejaEntrada(self.usuario, email['message-id'], email["From"], email["To"], email["Subject"], datetime.datetime.fromtimestamp(time.mktime(parsedate(email["Date"]))), datetime.datetime.now(), text)
 
            mails.append(mail_bandeja)
            
        # Cierre de la conexion
        m.quit()
        
        return mails
        
        
        

            


        



        
        
                
        
